ORDER BYはSQLの一部ではない
FROM句から書く
SELECT句のASで付けた別名をORDER BYで参照できない
まだ別名がつけられていないから
これは基本的にできない(できるRDBもある)
code:sql
select pid as id, pname as name from sample
order by id asc;
SQLの実行順序は、FROM→WHERE→GROUP BY→HAVING→SELECT(→ORDER BY)です。ORDER BYは正確にはSQLの一部ではないので、これは本当に蚊帳の外に置いてかまいません。そうすると、SELECT旬が正真正銘のラストになります。*12
*12 SELECT句で付けた列の別名をGROUP BY句で参照できないのは、この理由によります。参照しようにもまだその別名は作られていないからです。
/gosyujin-books/0257: 達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ.pdf#61d77fa52c53d800001d1d67
SELECT文の実行順序
FROM句を実行、1つの結果テーブルを作る
複数テーブルの場合、同じ名前の列名が存在する可能性がある
混乱を避けるためテーブル名.列名と指定するとよい
WHERE句があればFROM句が作った結果テーブルに適用、条件の結果がTRUEの行だけ残る
FALSE、UNKNOWNは除外
3値論理の真理表
GROUP BY句があれば実行、FROM句とWHERE句が作った結果テーブルに対してグルーピングを行っていく
グルーピングが終わったら各グループは1行に集約され、新しい結果テーブルが作られる
ORDER BY句はカーソル定義の一部
/gosyujin-books/0150: プログラマのためのSQL 第4版 すべてを知り尽くしたいあなたに.pdf#61d6c0f62c53d8000011e7d9
参考
NULL値と非NULLをORDER BYでソートするとNULL値は大きいのか小さいのか?